/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package hibernate;
import javax.swing.JOptionPane;
import org.hibernate.Session;
import org.hibernate.Transaction;



public class GestorHibernate extends HibernateUtil {
    
    protected final int ACTIVO = 0;
    protected final int ELIMINADO = 1;
    
    private Transaction tx;
    
    /**
     * Elimina un objeto del repositorio
     * @param objeto Objeto a eliminar
     */
    public void eliminarObjeto(Object objeto){
         try{   
            Session s = HibernateUtil.getSession();
            tx = s.beginTransaction();
            s.delete(objeto);        
            tx.commit();
         } catch(Exception ex){
                System.out.println("Repositorio.eliminarObjeto(Object objeto)"+ex);
            ex.printStackTrace();
                JOptionPane.showMessageDialog(null,"El elemento no se puede eliminar:"+ex.getMessage(),"Error",0);
                getTx().rollback();
         }
    }
    
    public void guardarObjeto(Object objeto){
        try {
        Session s = HibernateUtil.getSession();
        tx = s.beginTransaction();
        s.saveOrUpdate(objeto);        
        tx.commit();
        } catch (org.hibernate.exception.DataException ex) {
            JOptionPane.showMessageDialog(null, "Error el campo supera el límite de 255 caracteres", "Error en el ingreso de datos", JOptionPane.ERROR_MESSAGE);
        }
        catch(Exception ex){
            System.out.println("error "+ex);
            System.out.println("Repositorio.guardarObjeto(Object objeto)"+objeto.getClass()+": "+objeto.toString()+ex);
            ex.printStackTrace();
            getTx().rollback();
        }
    }

    /** Actualiza un objeto en el repositorio
     * 
     * @param objeto Objeto a actualizar
     */
    
    public void actualizarObjeto(Object objeto){
        try{
            Session s = HibernateUtil.getSession();
            tx = s.beginTransaction();
            s.update(objeto);        
            tx.commit();
            
            System.out.println(" actualizarObjeto() " +objeto.getClass()+": "+objeto.toString());
        } catch(Exception ex){
            System.out.println("Repositorio.actualizarObjeto(Object objeto)"+ex);
        }
    }   

    public Transaction getTx() {
        return tx;
    }

    public void setTx(Transaction tx) {
        this.tx = tx;
    }
    
    public void refescarObjeto(Object objeto){
        try {
        Session s = HibernateUtil.getSession();
        tx = s.beginTransaction();
        s.refresh(objeto);        
        tx.commit();
        } catch(Exception ex){
            System.out.println("error "+ex);
            System.out.println("Repositorio.refresObjeto(Object objeto)"+objeto.getClass()+": "+objeto.toString()+ex);
            ex.printStackTrace();
            getTx().rollback();
        }
    }

}  
      
 
 
